/*
 * @Author: 耿远风
 * @Date: 2020-08-18 11:18:06
 * @LastEditTime: 2020-10-19 09:13:58
 * @LastEditors: 耿远风
 * @Description: uuid
 */
import { Injectable } from '@nestjs/common';
// import uuid from 'uuid';

const generate = require('nanoid/generate');

/**
 * 产生一个全局唯一的id
 */
@Injectable()
export class UUIDService {
    /**
     * 原理是根据 timestamp
     * 3b99e3e0-7598-11e8-90be-95472fb3ecbd
     */
    uuid(): string {
        return this.nanoid(32);
    }

    /**
     * 生成任意长度的随机字符串，有极小的冲突几率
     *
     * 这里可以计算概率 https://zelark.github.io/nano-id-cc/
     * @param length 生成的字符串长度
     */
    nanoid(length: number = 10): string {
        const alphabet =
            '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        return generate(alphabet, length);
    }

    /**
     * 生成数字的书单编号
     * @param length
     */
    nanoidNum(length: number = 10): string {
        const alphabet = '0123456789';
        return generate(alphabet, length);
    }
}
